java文件。toURI不编码加号
我只是想用这个问题来检查我自己的理智。我有一个文件名,其中有一个+
(plus)字符,这在某些操作系统和文件系统(例如MacOS和HFS+)上完全有效
然而,我发现一个问题,我认为java.io.File#toURI()
运行不正常
例如:
new File("hello+world.txt").toURI().toString()
在我的Mac电脑上返回:
file:/Users/aretter/code/rocksdb/hello+world.txt
然而,这是不正确的,因为文件名中的+
(plus)字符尚未在URI中编码。URI根本不代表原始文件名,URI中的+
与文件名中的+
字符的含义截然不同
因此,如果我们解码URI,加号现在将被替换为(空格)字符,我们已经丢失了信息。e、 g:
URLDecoder.decode(new File("hello+world.txt").toURI().toURL().toString)
其结果是:
file:/Users/aretter/code/rocksdb/hello world.txt
相反,我所期望的是:
new File("hello+world.txt").toURI().toString()
导致:
file:/Users/aretter/code/rocksdb/hello%2Bworld.txt
因此,当它以后被使用和解码时,加号被保留下来
我很难相信JavaSE中会出现如此明显的错误。有人能指出我错在哪里吗
另外,如果有解决办法,我想听听?请记住,我实际上并没有提供静态字符串作为文件名,而是从磁盘读取文件目录,其中一些文件可能包含+
(加号)字符
共 (0) 个答案